package Server.Entity.Dominio;

import java.util.Date;

public abstract class ETaskStato {

	protected ETask task;
	//protected ETaskStato stato;

	public ETaskStato() {}
	
	/*public ETaskStato(ETaskStato stato) {
		this.stato=stato;	
	}*/	
	
	/**
	 * 
	 * @return 
	 */
	public abstract ETimeRecord startTR();

	/**
	 * 
	 * @param commento 
	 * @return 
	 */
	public abstract void stopTR(String commento);

	/**
	 * 
	 * @return 
	 */
	public abstract String getStatoString();
	
	public ETask getTask()
	{
		return task;
	}
	public void setTask(ETask task)
	{ 
		//stato.task = task;
		this.task = task;
	}

	public void changeStato()
	{
		Date inizioData = task.getDataInizio();
		Date fineData = task.getDataFine();
		Date dataAttuale = new Date(); 		
		
		if ( (dataAttuale.before(inizioData)) || (dataAttuale.equals(inizioData)) )
		{
			ETaskStato statoobj = new ETaskPianificato();
			statoobj.setTask(task);
			task.setStatoObj(statoobj);
		}
		else
		{
			if ((dataAttuale.after(inizioData)) && (dataAttuale.before(fineData)) )
			{
				if (!task.getTimerecords().isEmpty())
				{
					ETaskStato statoobj = new ETaskAvviato();
					statoobj.setTask(task);
					task.setStatoObj(statoobj);
				}
				else
				{
					ETaskStato statoobj = new ETaskIniziato();
					statoobj.setTask(task);
					task.setStatoObj(statoobj);
				}
			}
			else
			{
				if ((dataAttuale.after(fineData)) || (dataAttuale.equals(fineData)))
				{
					ETaskStato statoobj = new ETaskConcluso();
					statoobj.setTask(task);
					task.setStatoObj(statoobj);
				}
			}
		}		
	}

}